perm filename HALHED.PAL[HAL,HE]2 blob
sn#124851 filedate 1974-10-16 generic text, type C, neo UTF8
COMMENT ā VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .SBTTL ASSEMBLY FLAGS
C00005 00003 routine calling and defining macros.
C00008 00004 macros for handling tables & blocks
C00012 00005 Graph structure definitions
C00014 ENDMK
Cā;
.SBTTL ASSEMBLY FLAGS
;This macro gives the switch SW a default value VAL
.MACRO STSW SW,VAL
.IFNDF SW
SW == VAL ;if do not have a value already, give it one
.ENDC
.ENDM
STSW FLOAT,1 ;0 => no floating point capacity
.SBTTL DEFS -- standard definitions for HAL runtime routines
; PROGRAM DEFINITIONS
ERRTRP=4 ;time out and error trap
ILGINS=10 ;illegal instruction
CLKTRP=104 ;clock trap
RUG=50000 ;Restart of RUG
PS=177776 ;processor status word
KBIS=177560 ;keyboard input status
KBIR=177562 ;keyboard input register
KBOS=177564 ;keyboard output status
KBOR=177566 ;keyboard output register
CLKCNT=172544 ;clock counter
CLKSET=172542 ;clock set register
CLKS=172540 ;clock status
STRT11=500 ;starting address of program
IBUF=150 ;start of input buffer from 11
OBUF=160 ;start of output buffer to 11
HCOR=77776 ;highest useable word in core
;REGISTER DEFINITIONS
PC=%7 ;program counter
SP=%6 ;stack pointer
RF=%5 ;Display pointer
R5==%5
R4=%4 ;Saved across procedure calls
R3=%3 ;Saved across procedure calls
R2=%2 ;Saved across procedure calls
R1=%1 ;temp
R0=%0 ;temp
AC5==%5 ;Temp Floating point register
AC4==%4 ; " " " "
AC3==%3 ; " " " "
AC2==%2 ; " " " "
AC1==%1 ; " " " "
AC0==%0 ; " " " "
;MARK DEFINITIONS
MARK0 = 6400 ;MARK 0
MARK1 = 6401 ;MARK 1
MARK2 = 6402 ;ETC.
MARK3 = 6403
MARK4 = 6404
MARK5 = 6405
;Absolute address initialization
TEMP == . ;Save location counter for a bit.
. = 244 ;Floating exception
.WORD 246
RTI ;No action taken
. = TEMP ;Restore location counter
;routine calling and defining macros.
;Coded by RHT 9/74.
;This should be used at the start of routines which reference
; parameters off the RF stack. It gives the parameters
; symbolic names for clarity of coding.
;For example,
;
; ROUTINE FOO,<A,B>
;
;Goes to
;
; A==4
; B==2
;FOO:
.MACRO ROUTINE ID,ARGS
.IFNB ARGS
NNNN==0
.IRP II,<ARGS> ;Raise NNNN to twice the number of args.
NNNN==NNNN+2
.ENDM
.IRP II,<ARGS> ;Assign each arg NNNN and decrease same.
.IFDF II
.IF1
.ERROR Multiple definition for II
.ENDC
.IFF
II == NNNN
NNNN == NNNN-2
.ENDC
.ENDM
.ENDC
ID:
.ENDM
;This is useful in calling rountines which reference parameters off
; the RF stack. It sets up the stack properly, but does not
; save R0 or R1.
.MACRO CALL ID,ARGS
MOV RF,-(SP) ;Save RF
NNNN == 6400 ;This is a MARK 0 instruction
.IFNB ARGS
.IRP II,<ARGS>
MOV II,-(SP);Push an argument
NNNN == NNNN+1 ;Make NNNN the next MARK instruction.
.ENDM
.ENDC
MOV #NNNN,-(SP) ;Push the mark instruction.
MOV SP,RF ;Set up the display in RF.
JSR PC,ID ;Call the routine
.ENDM
;This macro is a temporary(ha,ha) method of defining floating point
;constants. LABIL is the constant name and MSB and LSB it's two
;16bit octal parts.
.MACRO FP LABIL,MSB,LSB
.MACRO LABIL
.WORD MSB,LSB
.ENDM
.ENDM
;macros for handling tables & blocks
.MACRO XX SYM ;Just gives SYM the next number.
.IFDF SYM
.IF1
.ERROR You are using SYM in two ways!!!
.ENDC
.IFF
SYM == II
II == II+2
.ENDC
.ENDM
.MACRO PUTLOC ADR,VAL
II==.
.= ADR
VAL
.=II
.ENDM
.MACRO TT INX,VAL
.=II+INX
VAL
.ENDM
;SMALL BLOCK DESCRIPTOR FORMAT
II == 0
XX IDFLAG ;ACTUALLY A BYTE -- GETS PUT IN ID PART OF TAG WORD
XX MAPRTN ;ROUTINE TO BE CALLED ON MARK
XX SIZE ;How many words for a value cell in this type block.
XX NPERB ;NUMBER OF BLOCKS PER BUFFER
XX GCFG ;SET IF THIS IS NOT A COLLECTABLE AREA
XX NMIN ;MIN NUMBER OF FREE BLOCKS TO BE RETURNED BY GC
XX NPCT ;MIN % OF FREE BLOCKS TO BE RETURNED BY GC
XX NXTSID ;NEXT BLOCK ON ID CHAIN
XX FFREE ;FREE LIST
XX FSTBUF ;OLDEST BUFFER
XX LSTBUF ;NEWEST BUFFER
XX NALLOC ;NUMBER ALLOCATED
XX NFREE ;NUMBER FREE
SPCHDR == II
;; EACH BUFFER
II == 0
XX NXTBUF ;NEXT BUFFER
XX PRVBUF ;PREVIOUS BUFFER
XX LSTBLK ;ADDRESS OF LAST BLOCK IN THIS BUFFER
XX FSTBLK ;POINTS AT FIRST LOCN
BUFHDR == II
;; EACH BLOCK
II == 0
TAG == -1 ;ā 0 MEANS INUSE (USED IN GC)
TAGID == -2 ;USED TO HOLD AN "ID" FOR THIS RECORD
XX WORD0 ;FIRST DATA WORD
;;GC METHODS
II == 0
XX METH ;ROUTINE TO CALL
XX NXTMTH ;NEXT ON CHAIN
.MACRO MMETH ROUT
ROUT
0
.ENDM
;;SPECIAL SPACES
.IF2
SIDHED == SIDCHN ;SO AUTOMATIC LINKAGE WORKS
.ENDC
SIDCNT == 0;
SIDCHN == 0;
.MACRO DEFSPC ID,MMRT,SZ,NPB,GCF,NMN,NPC
.IFNDF ID
SIDCNT==SIDCNT+1
ID==SIDCNT
.ENDC
II==.
.BLKW SPCHDR/2
TT IDFLAG,ID
TT MAPRTN,MMRT
TT SIZE,SZ
TT NPERB,NPB
TT GCFG,GCF
TT NMIN,NMN
TT NPCT,NPC
TT NXTSID,SIDCHN
TT FFREE,0
TT FSTBUF,0
TT LSTBUF,0
TT NALLOC,0
TT NFREE,0
.=II+SPCHDR
SIDCHN == II
.IF2
.IFGE MAXIDF-ID
II==.
.=SIDTBL+<ID*2>
SIDCHN
.=II
.ENDC
.ENDC
.ENDM
MAXIDF == 30 ;MAX INDEX INTO SIDTBL
;Graph structure definitions
;RHT 9/74
;CELL LINKS
II==0
XX DATUM
XX LINKF
XX LINKB
;GRAPH NODES
II==0
XX NXTGN ;CHAIN OF ALL GNODES IN THE WORLD
XX PRVGN
XX INVMRK ;USED AS FLAG
XX GNVAL ;POINTER AT VALUE
XX GNDEPS ;DEPENDENT GRAPH NODES
XX GNCLCS ;CALCULATOR LIST (DBL LINKED)
XX GNCHGS ;CHANGE LIST
;CALCULATOR CELL
II==0
XX NXTCLC ;LIST LINK
XX NEEDED ;LIST OF NEEDED NODES
XX FORM ;SOME SORT OF CODE TO EVAL
;CHANGER CELL
II==0
XX NXTCHG
XX CHGCOD